home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / jst_dev / sources / jst / jst.i < prev    next >
Text File  |  2000-04-12  |  7KB  |  399 lines

  1.     IFND    JST_I_INCLUDED
  2. JST_I_INCLUDED    =    1
  3.  
  4.     include    "gp_macros.i"
  5.  
  6.     IFND    REDEFINED_REGISTERS
  7. REDEFINED_REGISTERS = 1
  8. Ax EQUR A5
  9. Ay EQUR A6
  10.     ENDC
  11.  
  12. ; wait for blitter operations to finish
  13. ; simple but effective
  14.  
  15. WAIT_BLIT:MACRO
  16. .wait\@
  17.     BTST    #6,dmaconr+$DFF000
  18.     BNE.B    .wait\@
  19.     ENDM
  20.  
  21. ; save local variables
  22.  
  23. SET_VARZONE:MACRO
  24.     IFNE    NARG-2
  25.         FAIL    arguments "SET_VARZONE"
  26.     ENDC
  27.     STORE_REGS
  28.     lea    \1(pc),A0
  29.     lea    \2(pc),A1
  30.     JSRABS    SetLocalVarZone
  31.     RESTORE_REGS
  32.     ENDM
  33.  
  34. ; wait using Vertical beam delay (thanks to Harry for the routine)
  35.  
  36. BEAM_DELAY:MACRO
  37.     IFNE    NARG-1
  38.         FAIL    arguments "BEAM_DELAY"
  39.     ENDC
  40.  
  41.     move.w  d0,-(a7)
  42.     move.w    \1,D0
  43.     beq.b    .exit\@        ; don't wait
  44.  
  45. .loop1\@
  46.     move.w  d0,-(a7)
  47.         move.b    $dff006,d0    ; VPOS
  48.  
  49. .loop2\@
  50.     cmp.b    $dff006,d0
  51.     beq.s    .loop2\@
  52.     move.w    (a7)+,d0
  53.     dbf    d0,.loop1\@
  54.  
  55. .exit\@
  56.     move.w    (a7)+,d0
  57.     ENDM
  58.  
  59. ; jump to relocatable JST routine
  60.  
  61. JSRGEN:MACRO
  62.     IFNE    NARG-1
  63.         FAIL    arguments "JSRGEN"
  64.     ENDC
  65.  
  66.     PEA    .END_JSRGEN\@(PC)
  67.  
  68.     MOVE.L    RelTable(PC),-(A7)
  69.     ADD.L    #RelOff_\1,(A7)
  70.  
  71.     MOVE.L    A0,-(A7)
  72.     MOVE.L    4(A7),A0
  73.     MOVE.L    (A0),4(A7)
  74.  
  75.     MOVE.L    (A7)+,A0
  76.     RTS
  77.  
  78. .END_JSRGEN\@
  79.     ENDM
  80.  
  81. ; jump to relocatable JST routine, with interrupts disabled
  82.  
  83. JSRGEN_FREEZE:MACRO
  84.     IFNE    NARG-1
  85.         FAIL    arguments "JSRGEN_FREEZE"
  86.     ENDC
  87.     move.w    SR,-(A7)
  88.     move.w    #$2700,SR    ; freeze, bastard
  89.     JSRGEN    \1
  90.     move.w    (A7)+,SR
  91.     ENDM
  92.  
  93. ; jump to absolute JST routines (only when OS is active!!)
  94.  
  95. JSRABS:MACRO
  96.     IFNE    NARG-1
  97.         FAIL    arguments "JSRABS"
  98.     ENDC
  99.  
  100.     PEA    .END_JSRABS\@(PC)
  101.  
  102.     MOVE.L    AbsTable(PC),-(A7)
  103.     ADD.L    #AbsOff_\1,(A7)
  104.  
  105.     MOVE.L    A0,-(A7)
  106.     MOVE.L    4(A7),A0
  107.     MOVE.L    (A0),4(A7)
  108.  
  109.     MOVE.L    (A7)+,A0
  110.     RTS
  111.  
  112. .END_JSRABS\@
  113.     ENDM
  114.  
  115. JMPABS:MACRO
  116.     IFNE    NARG-1
  117.         FAIL    arguments "JMPABS"
  118.     ENDC
  119.  
  120.     MOVE.L    AbsTable(PC),-(A7)
  121.     ADD.L    #AbsOff_\1,(A7)
  122.  
  123.     MOVE.L    A0,-(A7)
  124.     MOVE.L    4(A7),A0
  125.     MOVE.L    (A0),4(A7)
  126.  
  127.     MOVE.L    (A7)+,A0
  128.     RTS
  129.  
  130.     ENDM
  131.  
  132. GO_SUPERVISOR:MACRO
  133.     JSRABS    SupervisorMode
  134.     ENDM
  135.  
  136. GO_USER:MACRO
  137.     JSRABS    UserMode
  138.     ENDM
  139.  
  140. SAVE_OSDATA:MACRO
  141.     IFLT    NARG-1
  142.         FAIL    arguments "SAVE_OSDATA"
  143.     ENDC
  144.  
  145.     IFGE    NARG-2
  146.         MOVEM.L    D0/A0,-(A7)
  147.         
  148.         MOVEQ    #0,D0
  149.         MOVE.B    \2,D0
  150.     
  151.         IFEQ    NARG-3
  152.             LEA    \3(PC),A0
  153.         ELSE
  154.             SUB.L    A0,A0
  155.         ENDIF
  156.         
  157.         JSRGEN    SetQuitKey
  158.  
  159.         MOVEM.L    (A7)+,D0/A0
  160.     ENDIF
  161.  
  162. ;;    move.l    D0,-(sp)
  163.     move.l    #\1,D0
  164.     JSRABS    SaveOSData
  165. ;;    move.l    (sp)+,D0    ; stack changes anyway!
  166.                 ; Registers are zeroed too ;-) [Ralf]
  167.     ENDM
  168.  
  169. ; obsolete now, but can be useful to load a data register
  170. ; with a relative address
  171.  
  172. GETUSRADDR:MACRO
  173.     IFNE    NARG-1
  174.         FAIL    arguments "PATCHUSRADDR"
  175.     ENDC
  176.     move.l    Ax,-(sp)
  177.     lea    \1(pc),Ax
  178.     move.l    Ax,D0
  179.     move.l    (sp)+,Ax
  180.     ENDM
  181.  
  182. GETGENADDR:MACRO
  183.     IFNE    NARG-1
  184.         FAIL    arguments "GETGENADDR"
  185.     ENDC
  186.     move.l    Ax,-(sp)
  187.     move.l    RelTable(pc),Ax
  188.     add.l    #RelOff_\1,Ax
  189.     move.l    (Ax),D0
  190.     move.l    (sp)+,Ax
  191.     ENDM
  192.  
  193. ; puts a RTS and notifies
  194.  
  195. PATCH_RTS:MACRO
  196.     IFNE    NARG-1
  197.         FAIL    arguments "PATCH_RTS"
  198.     ENDC
  199.  
  200.     REGISTER_PATCH    \1,#8    ; 6 bytes ahead to allow to find the pattern
  201.     move.w    #$4E75,\1
  202.     ENDM
  203.  
  204. ; puts a RTE and notifies
  205.  
  206. PATCH_RTE:MACRO
  207.     IFNE    NARG-1
  208.         FAIL    arguments "PATCH_RTE"
  209.     ENDC
  210.  
  211.     REGISTER_PATCH    \1,#8    ; 8 bytes ahead to allow to find the pattern
  212.     move.w    #$4E73,\1
  213.     ENDM
  214.  
  215. ; puts a NOP and notifies
  216.  
  217. PATCH_NOP:MACRO
  218.     IFNE    NARG-1
  219.         FAIL    arguments "PATCH_NOP"
  220.     ENDC
  221.  
  222.     REGISTER_PATCH    \1,#8    ; 8 bytes ahead to allow to find the pattern
  223.     move.w    #$4E71,\1
  224.     ENDM
  225.  
  226. ; puts 2 NOPs and notifies
  227.  
  228. PATCH_NOPNOP:MACRO
  229.     IFNE    NARG-1
  230.         FAIL    arguments "PATCH_NOPNOP"
  231.     ENDC
  232.  
  233.     REGISTER_PATCH    \1,#8    ; 8 bytes ahead to allow to find the pattern
  234.     move.l    #$4E714E71,\1
  235.     ENDM
  236.  
  237. ; allows to notify JST about a patch
  238. ; if PATCH_LOGGED is defined
  239.  
  240. REGISTER_PATCH:MACRO
  241.     IFNE    NARG-2
  242.         FAIL    arguments "REGISTER_PATCH"
  243.     ENDC
  244.  
  245.     IFD    PATCH_LOGGED
  246.     movem.l    D0-A0,-(A7)
  247.     lea    \1,A0
  248.     move.l    \2,D0
  249.     JSRGEN    LogPatch
  250.     movem.l    (A7)+,D0-A0
  251.     ENDC
  252.     ENDM
  253.  
  254. ; obsolete now
  255.  
  256. PATCHABSJMP:MACRO
  257.     PATCHUSRJMP    \1,\2
  258.     ENDM
  259.  
  260. ; obsolete now
  261.  
  262. PATCHABSJSR:MACRO
  263.     PATCHUSRJSR    \1,\2
  264.     ENDM
  265.  
  266.  
  267. PATCHUSRJMP:MACRO
  268.     IFNE    NARG-2
  269.         FAIL    arguments "PATCHUSRJMP"
  270.     ENDC
  271.     PATCHUSRXXX    \1,\2,$4EF9
  272.     ENDM
  273.  
  274. PATCHUSRJSR:MACRO
  275.     IFNE    NARG-2
  276.         FAIL    arguments "PATCHUSRJSR"
  277.     ENDC
  278.     PATCHUSRXXX    \1,\2,$4EB9
  279.     ENDM
  280.  
  281. PATCHGENJMP:MACRO
  282.     IFNE    NARG-2
  283.         FAIL    arguments "PATCHGENJMP"
  284.     ENDC
  285.     PATCHGENXXX    \1,\2,$4EF9
  286.     ENDM
  287.  
  288. PATCHGENJSR:MACRO
  289.     IFNE    NARG-2
  290.         FAIL    arguments "PATCHGENJSR"
  291.     ENDC
  292.     PATCHGENXXX    \1,\2,$4EB9
  293.     ENDM
  294.  
  295. PATCHUSRXXX:MACRO
  296.     REGISTER_PATCH    \1,#6
  297.  
  298.     movem.l    Ax/Ay,-(sp)
  299.     lea    \2(pc),Ax
  300.     lea    \1,Ay
  301.     move.w    #\3,(Ay)+
  302.     move.l    Ax,(Ay)
  303.     movem.l    (sp)+,Ax/Ay
  304.     ENDM
  305.  
  306. PATCHGENXXX:MACRO
  307.     REGISTER_PATCH    \1,#6
  308.  
  309.     movem.l    Ax/Ay,-(sp)
  310.  
  311.     move.l    RelTable(pc),Ax
  312.     add.l    #RelOff_\2,Ax
  313.     move.l    (Ax),Ax
  314.     lea    \1,Ay
  315.     move.w    #\3,(Ay)+
  316.     move.l    Ax,(Ay)
  317.  
  318.     movem.l    (sp)+,Ax/Ay
  319.     ENDM
  320.  
  321. TESTFILE:MACRO
  322.     IFNE    NARG-1
  323.         FAIL    arguments "TESTFILE"
  324.     ENDC
  325.     move.l    Ax,-(sp)
  326.     lea    \1(pc),Ax
  327.     move.l    Ax,D0
  328.     JSRABS    TestFile
  329.     move.l    (sp)+,Ax
  330.     ENDM
  331.  
  332. HD_PARAMS:MACRO
  333.     IFNE    NARG-3
  334.         FAIL    arguments "HD_PARAMS"
  335.     ENDC
  336. HDP_Start:
  337.     dc.l    $70004E75            ; 00 if the user tries to start the loader
  338.     dc.b    "JOTD"                ; 04 magic number
  339.     dc.l    16                ; 09 version (1.3 of JST)
  340. AbsTable:
  341.     dc.l    0                ; 0C pointer on general absolute table
  342. RelTable:
  343.     dc.l    0                ; 10 pointer on general relocate table
  344.     dc.l    \2                ; 14 diskfile size
  345.     dc.l    \3                ; 18 number of disks
  346.     dc.l    HDP_End-HDP_Start        ; 1C entrypoint offset
  347.     dc.l    HDP_FnameStart-HDP_Start    ; 20 offset of fname
  348. _SysBase:
  349.     dc.l    0                ; 24 sysbase
  350. _DosBase:
  351.     dc.l    0                ; 28 dosbase
  352.  
  353. HDP_FnameStart:
  354.     IFD    MAXON_ASM
  355.         DC.B    "\1",0
  356.     ELSE
  357.         dc.b    \1,0                ; used for diskfiles
  358.     ENDIF
  359.     cnop    0,4
  360. HDP_End:
  361.     ; start of the loader
  362.     ; initialize patch zone if PATCH_LOGGED set
  363.  
  364.     IFD    PATCH_LOGGED
  365.     JSRABS    InitLogPatch
  366.     ENDC
  367.     ENDM
  368.  
  369. ; if hardware not already defined, do it
  370.  
  371.     IFND    dmacon
  372.  
  373.     include    "hardware/custom.i"
  374.  
  375.     ENDC
  376.  
  377. ; copied caches flag from execbase.i to avoid including
  378. ; system libs only for those ones
  379.  
  380.     IFND    CACRF_EnableI
  381.  
  382. CACRF_EnableI    EQU    (1<<0)  ; Enable instruction cache
  383. CACRF_FreezeI    EQU    (1<<1)  ; Freeze instruction cache
  384. CACRF_ClearI    EQU    (1<<3)  ; Clear instruction cache 
  385. CACRF_IBE    EQU    (1<<4)  ; Instruction burst enable
  386. CACRF_EnableD    EQU    (1<<8)  ; 68030 Enable data cache 
  387. CACRF_FreezeD    EQU    (1<<9)  ; 68030 Freeze data cache 
  388. CACRF_ClearD    EQU    (1<<11) ; 68030 Clear data cache    
  389. CACRF_DBE    EQU    (1<<12) ; 68030 Data burst enable
  390. CACRF_WriteAllocate EQU (1<<13) ; 68030 Write-Allocate mode
  391. CACRF_EnableE    EQU    (1<<30) ; Master enable for external caches
  392.                  ; External caches should track the
  393.                  ; state of the internal caches
  394.                  ; such that they do not cache anything
  395.                  ; that the internal cache turned off; for.
  396. CACRF_CopyBack    EQU    (1<<31) ; Master enable for copyback caches
  397.     ENDC
  398.     ENDC
  399.